<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<script>
    // ES6 语法 Object.assign(tar, source) 浅拷贝, 拷贝的是地址!!!

    var o = {
        name: 'hliushi',
        id: '0001',
        msg: {
            'id': 21,
            'name': 'tom'
        },
        color: ['pink', 'red']
    }

    /**
     * 深拷贝
     * @param source 源对象
     * @param target 目标对象
     */
    function deepCopy(source, target) {
        for (var k in source) {
            // 判断我们的属性值属于哪一种数据类型
            var item = source[k];

            // 注意: 数组类型也是属于 Object, 所有需要将数组放在Object判断的前面
            if (item instanceof Array) {
                // 2.判断这个值是否是数组
                target[k] = []
                deepCopy(item, target[k])
            } else if (item instanceof Object) {
                // 3.判断这个值是否是对象
                target[k] = {};
                deepCopy(item, target[k])
            } else {
                // 4.属于简单数据类型
                target[k] = item;
            }
        }
    }


    var obj = {}
    deepCopy(o, obj)
    console.log(obj)


    o.msg.id = 2312;
    console.log('----------------')
    console.log(obj)


    console.log('**********************************')
    var lightObj = {}
    Object.assign(lightObj, o)
    console.log(lightObj)
    o.msg.name = 'nick';
    console.log('----------------')
    console.log(lightObj)
</script>
</body>
</html>
